#ifndef MYSQL_DATABASE_FACTORY_H
#define MYSQL_DATABASE_FACTORY_H

#include <memory>
#include <odb/database.hxx>
#include <odb/mysql/database.hxx>
#include <string>

namespace chat {
/**
 * @brief 工厂类：创建一个数据库操作句柄
 */
class DataBaseFactory {
   public:
    /**
     * @param max_pool[in]: 最大连接池数量
     * @param user[in]: mysql用户名
     * @param password[in]: 对应用户名密码
     * @param db[in]: 要链接到的数据库名称
     * @param ip[in]: mysql服务器ip
     * @param port[in]: mysql服务器端口
     * @param charset[in]: 所采用的字符集
     */
    static std::shared_ptr<odb::mysql::database> create(
        const int max_pool, const std::string& user,
        const std::string& password, const std::string& db,
        const std::string& ip, const uint16_t port,
        const std::string& charset) {
        std::unique_ptr<odb::mysql::connection_pool_factory> cpf =
            std::make_unique<odb::mysql::connection_pool_factory>(max_pool, 0);

        // 2. 构建数据库操作对象
        return std::make_shared<odb::mysql::database>(
            user, password, db, ip, port, nullptr, charset, 0, std::move(cpf));
    }
};
}  // namespace chat

#endif  // MYSQL_DATABASE_FACTORY_H